package com.llseven.ai.spring.llseven.service;

import com.llseven.ai.spring.llseven.config.QiniuConfig;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.net.URL;

/**
 * @author ywb
 * @date 2025-04-18 12:43
 */
@Service
public class QiniuService {
    
    @Resource
    private UploadManager uploadManager;
    
    @Resource
    private Auth qiniuAuth;
    
    @Resource
    private QiniuConfig qiniuConfig;
    
    // 外链域名配置（可以也抽出去配置）
    private static final String CDN_DOMAIN = "https://suwchu9pz.hn-bkt.clouddn.com";
    
    public String uploadTo(String key, MultipartFile file) {
        try {
            String bucket = qiniuConfig.getDefaultBucket();
            
            // 获取上传 token
            String upToken = qiniuAuth.uploadToken(bucket);
            
            // 执行上传
            uploadManager.put(file.getBytes(), key, upToken);
            
            // 返回外链地址
            return CDN_DOMAIN + "/" + key;
        } catch (Exception e) {
            throw new RuntimeException("上传七牛失败", e);
        }
    }
    
    
    /**
     * 通过 URL 上传文件到七牛云（不使用 MultipartFile）
     *
     * @param key 上传到七牛云的目标路径（包括文件名）
     * @param fileUrl 文件的 URL 地址
     * @return 上传后的文件外链 URL
     */
    public String uploadFromUrl(String key, String fileUrl) {
        try {
            // 下载文件内容
            InputStream inputStream = new URL(fileUrl).openStream();
            
            // 将输入流转换为字节数组
            byte[] fileBytes = inputStream.readAllBytes();
            inputStream.close();
            
            // 获取上传 token
            String bucket = qiniuConfig.getDefaultBucket();
            String upToken = qiniuAuth.uploadToken(bucket);
            
            // 执行上传
            uploadManager.put(fileBytes, key, upToken);
            
            // 返回外链地址
            return CDN_DOMAIN + "/" + key;
            
        } catch (Exception e) {
            throw new RuntimeException("从 URL 上传文件到七牛失败", e);
        }
    }
    public String getUploadToken(String key) {
        String bucket = qiniuConfig.getDefaultBucket();
        
        // 如果你希望绑定 key 上传，可以传入 key；否则传 null 表示不限制上传 key
        return qiniuAuth.uploadToken(bucket, key, 3600, null);
    }
    
}

